/**
 * 项目名：	Rumba Plan
 * 
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 文件名：	IQueryResultMgr.java
 * 模块说明：	
 * 修改历史：
 * May 14, 2007 - zhangyanbo - 创建。
 */
package com.hd123.rumba.qt.result;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

import net.sf.hibernate.HibernateException;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.qt.def.IQueryDef;
import com.hd123.rumba.runtime.IManager;
import com.hd123.rumba.sql.JdbcRow;
import com.hd123.rumba.user.IUser;

/**
 * @author zhangyanbo
 * 
 */
public interface IQueryResultMgr extends IManager {

  /**
   * 取得与qrd.name, qrd.time, qrd.user,
   * qrd.queryCriteria相同的QueryResultDescription. <br>
   * 如果有多个, 返回startTime最大的那个. <br>
   * 如果不存在, 返回null. <br>
   * 返回的qrd可以是正在执行的.
   * 
   * @param qrd
   * @return 返回的qrd.query是空的.
   */
  public QueryResultDescription findQrdByQrd(QueryResultDescription qrd) throws HibernateException,
      BusinessException;

  /**
   * 取得与qrd.name, qrd.time, qrd.user相同的QueryResultDescription的列表 返回的是一个list
   */
  public List creatQrdList(QueryResultDescription qrd) throws HibernateException, BusinessException;

  /**
   * 取得与qrd.name, qrd.time, qrd.user相同的QueryResultDescription. <br>
   * 如果有多个, 返回startTime最大的那个. <br>
   * 如果不存在, 返回null. <br>
   * 返回的qrd可以是正在执行的.
   * 
   * @param qrd
   * @return 返回的qrd.query是空的.
   * @deprecated
   */
  public QueryResultDescription findQrdByNameUser(String base, String name, Date time, IUser user)
      throws HibernateException, BusinessException;

  public QueryResultDescription findQrd(IQueryDef queryDef, Date time, IUser user)
      throws BusinessException, HibernateException;

  public List findExpiredResults() throws HibernateException;

  /**
   * @param uuid
   * @return 返回的qrd.query是空的.
   * @throws HibernateException
   */
  public QueryResultDescription findQrdByUuid(String uuid) throws HibernateException;

  /**
   * 以开始时间降序返回指定用户正在运行中的名为query_uuid的查询的qrds. 如果没有, 返回的List.size()==0.
   * 
   * @param query_name
   * @return
   * @throws Exception
   */
  public List<QueryResultDescription> findRunningQueries(IUser user, String query_uuid)
      throws Exception;

  /**
   * 以开始时间降序返回指定用户的已完成的名为query_uuid的查询的qrds. 如果没有, 返回的List.size()==0.
   * 
   * @param query_name
   * @return
   * @throws Exception
   */
  public List<QueryResultDescription> findFinishedQueries(IUser user, String query_uuid)
      throws Exception;

  public List<QueryResultDescription> findAllResults(String query_uuid) throws BusinessException,
      HibernateException;

  /**
   * 以开始时间降序返回指定用户的查询的qrds.
   * 
   * @param user
   * @param query_uuid
   * @return
   * @throws Exception
   */
  public List<QueryResultDescription> findAllResults(IUser user, String query_uuid)
      throws BusinessException, HibernateException;

  /**
   * 从查询结果集中找到给定uuid的行
   * 
   * @param qrd
   * @param uuid
   * @return
   * @throws HibernateException
   * @throws SQLException
   */
  public JdbcRow findResultRow(QueryResultDescription qrd, String uuid) throws HibernateException,
      SQLException;

  public void saveQrd(QueryResultDescription qrd) throws HibernateException;

  public void removeQrd(QueryResultDescription qrd) throws HibernateException;
}
